// Copyright (C) 2014 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 12.2.8
description: Expressions should be evaluated in left-to-right order.
---*/

function Test() {
    var tag = function(templateObject, a, b, c) {
      callCount++;
      assert.sameValue(a, 0);
      assert.sameValue(b, 1);
      assert.sameValue(c, 2);
    };
    var i = 0;
    var callCount;

    assert.sameValue(`a${ i++ }b${ i++ }c${ i++ }d`, 'a0b1c2d');

    i = 0;
    callCount = 0;

    tag`a${ i++ }b${ i++ }c${ i++ }d`;

    assert.sameValue(callCount, 1);
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
